#include <iostream>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
const int N = 100010;
const int M = 5010;
int flag[M]; // 木棒长度计数
/**
 * 为什么 500000004 是 2 的逆元？
 * 因为 2 × 500000004 = 1000000008，而 1000000008 mod 10^9+7 = 1，满足逆元的定义（a×b ≡ 1 mod m）
 *
 * 500000004 是 2 在模 10^9+7 下的乘法逆元
 * 在模运算中，除法不能直接进行，需要用乘以除数的逆元来替代
 * 所以 n × (n-1) ÷ 2 等价于 n × (n-1) × (2 的逆元)
 */
// 计算组合数C(n,2)
ll C2(ll n) {
    if (n < 2) return 0;
    return n * (n - 1) % mod * 500000004 % mod; // 500000004是2的逆元
}

int main() {
    ll sum = 0;
    int n, a_val;
    cin >> n;
    
    // 读入并统计各长度数量
    for (int i = 0; i < n; i++) {
        cin >> a_val;
        if (a_val <= 5000) flag[a_val]++;
    }

    // 枚举单边长度a_val
    for (int a_val = 2; a_val <= 5000; a_val++) {
        if (flag[a_val] < 2) continue; // 至少2根
        
        ll ways = 0;
        // 枚举拼接边第一段长度x
        for (int x = 1; x <= a_val / 2; x++) {
            int y = a_val - x;
            if (x == y) {
                if (flag[x] >= 2) 
                    ways = (ways + C2(flag[x])) % mod;
            } else {
                if (y <= 5000) // 确保不越界
                    ways = (ways + (ll)flag[x] * flag[y]) % mod;
            }
        }
        sum = (sum + C2(flag[a_val]) * ways) % mod;
    }
    cout << sum << endl;
    return 0;
}